package com.atguigu.bigdata.scala.chapter10

object Scala03_Transform {

    def main(args: Array[String]): Unit = {
//        implicit def transform2( user:User ): UserExtStudent = {
//            new UserExtStudent
//        }

        implicit def transform1( user:User ): UserExt = {
            new UserExt
        }


        // TODO 隐式转换 => 二次编译
        // 隐式转换是在编译出现错误时执行的。

        // 同一个作用域中，有相同的转换规则，那么编译器不知道用哪一个，会报错
        // 隐式转换其实就是类型的转换，所以转换时，隐式函数中参数只有一个，就是需要被转换的类型
        val user: User = thirdPart_User()
        user.updateUser() //
        user.insertUser()

    }
    class UserExt {
        def updateUser(): Unit = {
            println("update user...")
        }
    }
    class UserExtStudent {
        def updateUser(): Unit = {
            println("Student...")
        }
    }
    class User {
        def insertUser(): Unit = {
            println("insert user...")
        }
    }


    def thirdPart_User() = {
        new User()
    }
}
